IAM初心者がAWS CLIでスイッチロールするまで
こんにちは。
サービスGの金谷です。
これまでIAMの設定を自分でやることがあまりなく、スイッチロールで何が起きているのか全然理解できていなかったのでまとめようと思います。
まず大前提
AWSアカウント≠ IAMユーザー です。
当然といえば当然なのですが別物です。
ざっくり説明するとAWSアカウントの中にIAMユーザーがいるといった形で、AWSアカウント=ルートユーザーのようなイメージです。
私個人の経験としてはプライベートでAWSを学び触り始めたばかりのときは
IAMを何も設定せずに他のサービスを触ったりしていましたが、通常は使用するべきではないです。
ちゃんとIAMユーザーを作成してそちらで作業するようにしましょう。
スイッチロールとは
名前の通りIAMロールを切り替える機能です。
アカウントを跨いだロールの切り替えも可能です。(というかこちらをメインに使います)
上図ではスイッチ元のアカウントAから、スイッチ先のアカウントBのロールにスイッチロールできます。
よくあるユースケースとしては以下の記事にあるように、環境毎にAWSアカウントを作成するなどして
その環境毎で権限やユーザーを管理したりすることが多いです。
そもそも何が嬉しいのか
スイッチロール自体のメリットは一度ログアウトしてから、もう一度別のアカウントでログインする必要がなくなるのが楽になるというところかと思います。
ですが、そもそもアカウントをなぜ分ける必要があるのか?と疑問に思われる方も多いかもしれません。
こちらについてはこの記事では詳しく言及しませんが、例えば上記のような構成であれば
各環境ごとの利用費の見通しを良くしたり、アクセス制御の設定をシンプルにしたりすることが可能です。
以下の記事がとてもまとまっていて良いかと思いますのでぜひ参考にしてください。
実際にスイッチロールしてみる
手順については上記の記事で丁寧に解説されています。
TestSwitchRoleというロールでスイッチロールできるようにします。
(私の場合はスイッチ元のアカウントにすでにAssumeRoleを許容するポリシーが管理者によって設定されていたので、ポリシーの設定は特にしていません)
AWS CLIでのスイッチロール
マネジメントコンソールからスイッチロールができたので、今度はAWS CLIからスイッチ先のロールで操作してみます。
AWS CLIのバージョンは以下です。
❯ aws --version aws-cli/2.1.25 Python/3.9.1 Darwin/19.6.0 source/x86_64 prompt/off
まずは~/.aws/credentials
にアクセスキーを設定します。
ここにはスイッチ元のアクセスキーを設定します。
(defaultの部分は任意、TestSwitchRoleの部分は前の手順で作成したロールに適宜置き換えてください)
[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
次に~/.aws/config
を設定します。
[profile default] region = ap-northeast-1 output = json [profile test] role_arn = arn:aws:iam::スイッチ先のID:role/TestSwitchRole source_profile = default
これでおおよそは動作するかと思いますが、MFAを有効にしている場合にはその設定も必要になります。
(自分が触った際はA client error (AccessDenied) occurred when calling the AssumeRole operation: User arn:aws:iam::〇〇:user/XXXXX is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::△△:role/□□
みたいなエラーが出ました。)
以下のように追記しましょう。(私はここでハマりました)
[profile default] region = ap-northeast-1 output = json [profile test] role_arn = arn:aws:iam::スイッチ先のID:role/TestSwitchRole source_profile = default mfa_serial = arn:aws:iam::スイッチ元のID:mfa/スイッチ元のユーザー // 追記した箇所
これでCLIでもスイッチ先のロールで操作ができるはずです。
aws s3 ls --profile test
参考にさせていただいた記事
AWS アカウント、IAM ユーザー、IAM グループ、IAM ロールの違い